package br.com.prontuario.faces;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import org.primefaces.event.SelectEvent;

import br.com.prontuario.entidade.Animal;
import br.com.prontuario.entidade.Consulta;
import br.com.prontuario.entidade.Proprietario;
import br.com.prontuario.logica.contract.ConsultaLogicaContract;
import br.com.prontuario.logica.contract.DefaultLogicaContract;
import br.com.prontuario.util.FacesUtil;

@ManagedBean(name="consultaFaces")
@ViewScoped
public class ConsultaFaces extends FacesUtil {
	
	private static final long serialVersionUID = 1L;

	@ManagedProperty(value = "#{consultaLogica}")
	private ConsultaLogicaContract logicaConsulta;
	
	@ManagedProperty(value = "#{logicaDefault}")
	private DefaultLogicaContract<Animal> logicaAnimal;
	
	private Consulta consulta = new Consulta();
	
	private Boolean isPopup = false;
	
	public ConsultaFaces() {
		Consulta consulta = (Consulta) getSession().getAttribute("consultaSelecionada");
		if (consulta != null) {
			this.consulta = consulta; 
			this.colocarProprietarioNaSessao(this.consulta.getProprietario());
		}
		
		Boolean popup = (Boolean) getSession().getAttribute("isPopup");
		if (popup != null) {
			isPopup = popup;
			getSession().setAttribute("isPopup", null);
		}

	}
	
	public void adicionarEditar() {
		try {
			if (this.consulta.getId() == null) {
				logicaConsulta.adicionar(this.consulta);
				adicionarMensagem("Consulta adicionada com sucesso.");
			} else {
				logicaConsulta.editar(this.consulta);
				adicionarMensagem("Consulta editada com sucesso.");
			}
			getSession().setAttribute("consultaSelecionada", this.consulta);
			this.colocarProprietarioNaSessao(this.consulta.getProprietario());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public String voltarConsulta() {
		return "buscaConsulta?faces-redirect=true";
	}
	
    public void retornoProprietario(SelectEvent event) {
        Proprietario proprietario = (Proprietario) event.getObject();
        this.consulta.setProprietario(proprietario);
        this.colocarProprietarioNaSessao(proprietario);
        desabilitarDialog();
    }
    
    public void retornoAnimal(SelectEvent event) {
    	Animal animal = (Animal) event.getObject();
    	this.consulta.setAnimal(animal);
    	desabilitarDialog();
    }

    public void colocarProprietarioNaSessao(Proprietario proprietario) {
    	getSession().setAttribute("proprietarioConsulta", proprietario);
    }
    
    public void limparSelecaoAnimal() {
    	this.consulta.setAnimal(null);
    }

    
	public List<Animal> autoCompleteAnimal(String query) {
		List<Animal> suggestions = new ArrayList<>();
		if (query.length() > 2) {
			try {
				suggestions = logicaAnimal.buscarPorRelacionamento(Animal.class, "proprietario", this.consulta.getProprietario().getId());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return suggestions;
    }
	
    /**
     * Abre o Dialog Framework
     */
    public void selecionarAnimal() {
    	this.colocarProprietarioNaSessao(this.consulta.getProprietario());
    	abrirDialogFramework("animal", true);
    }

	public Consulta getConsulta() {
		return consulta;
	}

	public void setConsulta(Consulta consulta) {
		this.consulta = consulta;
	}

	public void setLogicaConsulta(ConsultaLogicaContract logicaConsulta) {
		this.logicaConsulta = logicaConsulta;
	}

	public void setLogicaAnimal(DefaultLogicaContract<Animal> logicaAnimal) {
		this.logicaAnimal = logicaAnimal;
	}

	public Boolean getIsPopup() {
		return isPopup;
	}

	public void setIsPopup(Boolean isPopup) {
		this.isPopup = isPopup;
	}
	
	
}